package hz.mobileproject.pda.toolsmanager.activity;

import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.SPUtils;
import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import hz.mobileproject.pda.R;
import hz.mobileproject.pda.app.MainApp;
import hz.mobileproject.pda.entity.request.Request_loadPoliceInfo;
import hz.mobileproject.pda.entity.response.Response_loadPoliceInfo;
import hz.mobileproject.pda.entity.response.Response_login_user;
import hz.mobileproject.pda.listener.CustomNetCallBack;
import hz.mobileproject.pda.network.Constance;
import hz.mobileproject.pda.toolsmanager.adapter.AddReportoryAdapter;
import hz.mobileproject.pda.toolsmanager.adapter.ToolsStockAdapter;
import hz.mobileproject.pda.toolsmanager.bean.request.RQ_AddReportList;
import hz.mobileproject.pda.toolsmanager.bean.response.RP_FreeCountTools;
import hz.mobileproject.pda.toolsmanager.bean.response.RP_ToolInfo;
import hz.mobileproject.pda.toolsmanager.bean.response.RP_ToolSysSet;
import hz.mobileproject.pda.toolsmanager.utils.ToolCommonHttpUtils;
import hz.mobileproject.pda.ui.base.BaseScanActivity;
import hz.mobileproject.pda.utils.HttpRqUtils;
import hz.mobileproject.pda.utils.TextViewUtil;

/**
 * 增加库存
 */
@ContentView(R.layout.activity_add_reportory)
public class AddReportoryActivity extends BaseScanActivity {

    @ViewInject(R.id.tv_jb_person)
    private TextView tv_jb_person;
    @ViewInject(R.id.lv_tools_stock)
    private  ListView lv_tools_stock;
    @ViewInject(R.id.bt_end_kc)
    private Button bt_end_kc;


    private static final int REQUEST_CODE_POLICE = 0x1075;   //经办人
    private static final int REQUEST_CODE_TOOLS = 0x1077;    //增加库存工具
    private RP_ToolSysSet mToolSystemSet;
    private Gson mGson;



    private ListView lv_add_kucun_item;
    private List<RP_ToolInfo> addReportoryToolBeanList = new ArrayList<>();

    private ToolsStockAdapter mToolsStockAdapter;
    private Response_loadPoliceInfo mPoliceInfo;
    private AddReportoryAdapter addReportoryAdapter;

    @Override
    protected void initData() {
        lv_add_kucun_item = (ListView) findViewById(R.id.lv_add_kucun_item);
        mGson = new Gson();
        addReportoryAdapter = new AddReportoryAdapter(AddReportoryActivity.this,addReportoryToolBeanList);

        lv_add_kucun_item.setAdapter(addReportoryAdapter);

        mToolsStockAdapter = new ToolsStockAdapter(this, new ArrayList<RP_FreeCountTools>());
        lv_tools_stock.setAdapter(mToolsStockAdapter);


        mToolSystemSet = (RP_ToolSysSet) getIntent().getSerializableExtra("key");
        //扫描民警
        scanPolice();


        addReportoryAdapter.setmOnDelClickListener(new AddReportoryAdapter.onDelClickListener() {
            @Override
            public void dele(int position) {
                addReportoryAdapter.deleteOne(position);
            }
        });

        bt_end_kc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //所有增加的库存
                List<RP_ToolInfo> tools = addReportoryAdapter.getListData();
                addToolStockToService(tools);
            }
        });
    }

    /**
     *
     * @param tools
     * 调用增加库存接口
     */
    private void addToolStockToService(List<RP_ToolInfo> tools) {
        List<RQ_AddReportList> list = new ArrayList<>();



        for(int i = 0; i < tools.size();i++) {
            RP_ToolInfo tool = tools.get(i);
            RQ_AddReportList bean = new RQ_AddReportList();
            bean.setCus_number(mPoliceInfo.getCus_number() + "");
            bean.setDept_id(mPoliceInfo.getDepartment_id() + "");
            bean.setDept_name(mPoliceInfo.getDepartment_name());
            bean.setPerson_id(mPoliceInfo.getPolice_id());
            bean.setPerson_name(mPoliceInfo.getPolice_name());
            bean.setTool_id(tool.getTool_id());
            bean.setTool_name(tool.getTool_name());
            bean.setTool_type(tool.getTool_type() + "");
            bean.setAdd_time(TimeUtils.getNowString(new SimpleDateFormat(Constance.DATE_YMDHMS)));
            bean.setAllot_status(2 +"");
            list.add(bean);
        }

        HttpRqUtils.httpPost(Constance.BASE_URL + Constance.URL_TOOL_KU_CUN,list,addKuCunCallBack);

    }

    private CustomNetCallBack addKuCunCallBack = new CustomNetCallBack() {
        @Override
        public void onSuccessFromSer(int rtnCode, String rtnMsg, String data) {
            ToastUtils.showLong("增加存库完成");
            finish();
        }

        @Override
        public void onErrorFromSer(int rtnCode, String rtnMsg) {

        }

        @Override
        public void onErrorFromNet(Throwable ex, boolean isOnCallback) {

        }
    };

    @Override
    protected void onScanSucesess(int requestCode, String scanMsg) {
        LogUtils.e(scanMsg);
        switch (requestCode) {
            case REQUEST_CODE_POLICE:
                getPliceInfoFromSer(scanMsg);
                break;
            case REQUEST_CODE_TOOLS:
                //TODO 扫描工具
                getToolInfoFromSer(scanMsg);
                break;
        }
    }


    /**
     * 请求网络接口获取库存信息
     */
    private void getFreeToolsCountFromSer() {
        ToolCommonHttpUtils.getFreeToolsCountFromSer(mPoliceInfo, new CustomNetCallBack() {
            @Override
            public void onSuccessFromSer(int rtnCode, String rtnMsg, String data) {
                LogUtils.e(data);
                List<RP_FreeCountTools> tempList = mGson.fromJson(data, new TypeToken<ArrayList<RP_FreeCountTools>>() {
                }.getType());
                mToolsStockAdapter.clearAdd(tempList);
                if (tempList == null || tempList.size() == 0) {
                    ToastUtils.showLong("库存信息为空");
                }
            }

            @Override
            public void onErrorFromSer(int rtnCode, String rtnMsg) {
                ToastUtils.showLong("获取库存信息失败(" + rtnCode + "," + rtnMsg + ")");
            }

            @Override
            public void onErrorFromNet(Throwable ex, boolean isOnCallback) {
                ToastUtils.showLong("获取库存信息失败");
                LogUtils.e(ex);
            }
        });
    }


    /**
     * 请求网络接口获取工具信息
     *
     * @param scanStr
     */
    private void getToolInfoFromSer(String scanStr) {
        ToolCommonHttpUtils.getToolInfoFromSer(scanStr, mToolSystemSet, mPoliceInfo, new CustomNetCallBack(){
            @Override
            public void onSuccessFromSer(int rtnCode, String rtnMsg, String data) {
                RP_ToolInfo toolInfo = mGson.fromJson(data, RP_ToolInfo.class);
                if (toolInfo == null) {
                    ToastUtils.showLong("工具信息格式错误或为空");
                    return;
                }

                if(toolInfo.getAllot_status() == RP_ToolInfo.ALLOT_STATUS_NOTALLOT) {
                    ToastUtils.showLong("工具已库存");
                    return;
                }
                //判断工具是否报废
                if(toolInfo.getStatus() == RP_ToolInfo.STATUS_SCRAP){
                    ToastUtils.showLong("此工具已被报废");
                    return;
                }

                //判断此工具是否已在发放列表
                for(int i = 0; i <addReportoryToolBeanList.size();i++) {
                    if(toolInfo.getTool_id().equals(addReportoryToolBeanList.get(i).getTool_id())) {
                        ToastUtils.showLong("此工具已存在列表中");
                        return;
                    }
                }

                addReportoryAdapter.add(toolInfo);

            }

            @Override
            public void onErrorFromSer(int rtnCode, String rtnMsg) {
                ToastUtils.showLong("获取工具信息失败(" + rtnCode + "," + rtnMsg + ")");
            }

            @Override
            public void onErrorFromNet(Throwable ex, boolean isOnCallback) {
                ToastUtils.showLong("获取工具信息失败");
                LogUtils.e(ex);
            }
        });
    }



    /**
     * 请求网络接口获取民警信息
     *
     * @param scanStr
     */
    private void getPliceInfoFromSer(String scanStr) {
        scanStr = scanStr.indexOf("P") == 0 ? scanStr.substring(1) : scanStr;
        Request_loadPoliceInfo rq_lpi = new Request_loadPoliceInfo();
        rq_lpi.setCusNumber(SPUtils.getInstance("app_login").getString(Constance.SP_CUSNUMBER));
        rq_lpi.setPoliceCode(scanStr);
        //发送获取民警信息接口请求
        HttpRqUtils.httpPost(Constance.BASE_URL + Constance.URL_LOAD_POLICE_INFO, rq_lpi, policeInfoCallback);
    }

    /**
     * 获取民警信息接口回调
     */
    private CustomNetCallBack policeInfoCallback = new CustomNetCallBack() {
        @Override
        public void onSuccessFromSer(int rtnCode, String rtnMsg, String data) {
            LogUtils.e(data);
            Response_loadPoliceInfo loadPoliceInfo = mGson.fromJson(data, Response_loadPoliceInfo.class);
            if (loadPoliceInfo == null) {
                ToastUtils.showLong("民警信息为空");
                return;
            }
            mScanLoadingDialog.dismiss();
            mPoliceInfo = loadPoliceInfo;
            TextViewUtil.setUnderLine(tv_jb_person,mPoliceInfo.getPolice_name());
            addReportoryAdapter.setPoliceName(mPoliceInfo.getPolice_name());
            //接着扫描增加库存的工具
            scanAfterPolice();
        }

        @Override
        public void onErrorFromSer(int rtnCode, String rtnMsg) {
            ToastUtils.showLong("获取民警信息失败");
        }

        @Override
        public void onErrorFromNet(Throwable ex, boolean isOnCallback) {
            ToastUtils.showLong("获取民警信息失败");
            LogUtils.e(ex);
        }
    };


    /*--------------扫描流程---------------------*/
    private void scanPolice() {
        //是否需要扫描民警
        if (RP_ToolSysSet.TSS_CALL_TYPE_SCAN_USER == (mToolSystemSet.getCall_type())) {
            //扫民警
            openScan(REQUEST_CODE_POLICE, mToolSystemSet, "请扫描增加存库人条码");
        } else if (RP_ToolSysSet.TSS_CALL_TYPE_LOGIN_USER == (mToolSystemSet.getCall_type())) {
            //使用登录民警信息
            mPoliceInfo = new Response_loadPoliceInfo();
            Response_login_user loginUser = MainApp.getInstance().getLoginUser();
            mPoliceInfo.setCus_number(loginUser.getCus_number());
            mPoliceInfo.setDepartment_id(loginUser.getDepartment_id());
            mPoliceInfo.setDepartment_name(loginUser.getDepartment_name());
            mPoliceInfo.setPolice_code(loginUser.getPolice_code());
            mPoliceInfo.setPolice_id(loginUser.getPolice_id());
            mPoliceInfo.setPolice_name(loginUser.getPolice_name());
            TextViewUtil.setUnderLine(tv_jb_person,loginUser.getPolice_name());
            //接着扫描增加库存的工具
            scanAfterPolice();
        }
    }


    //使用登录民警为经办人，扫描借出人
    private void scanAfterPolice() {
        getFreeToolsCountFromSer();
        //扫描借出人
        openScan(REQUEST_CODE_TOOLS, mToolSystemSet, "请扫描增加库存的工具");
    }


}
